import { getRefreshToken, setRefreshToken, setAccessToken } from 'utils/auth'
import { login } from 'api/account'
// 是否是数值
export function numberNotNull(number) {
  return !!number || number === 0
}

/**
 *
 * 金额格式化
 * number：要格式化的数字
 * scale：保留几位小数
 * dec_point：小数点符号
 * thousands_sep：千分位符号
 */
export function amountFormat(number, scale = 2, thousands_sep = ',') {
  // number = (number + '').replace(/[^0-9+-Ee.]/g, '')
  // const n = !isFinite(+number) ? 0 : +number
  //
  // const prec = !isFinite(+scale) ? 0 : Math.abs(scale)
  // const sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep
  // const dec = (typeof dec_point === 'undefined') ? '.' : dec_point
  // let s = ''
  // const toFixedFix = function(n, prec) {
  //   const k = Math.pow(10, prec)
  //   return '' + Math.floor(n * k) / k
  // }
  // s = (prec ? toFixedFix(n, prec) : '' + Math.floor(n)).split('.')
  // const re = /(-?\d+)(\d{3})/
  // // console.log(s)
  // while (re.test(s[0])) {
  //   s[0] = s[0].replace(re, '$1' + sep + '$2')
  // }
  //
  // if ((s[1] || '').length < prec) {
  //   s[1] = s[1] || ''
  //   s[1] += new Array(prec - s[1].length + 1).join('0')
  // }
  // return s.join(dec)
  if (!numberNotNull(number)) {
    return number
  }
  const value = Number(number)
  // 金额转换 分->元 保留2位小数 并每隔3位用逗号分开 1,234.56
  const str = value.toFixed(scale) + ''
  // 取到整数部分
  let integer
  let dot
  const index = str.indexOf('.')
  if (index === -1) {
    integer = str
    dot = ''
  } else {
    integer = str.substring(0, index)
    dot = str.substring(index)
  }
  const intSum = integer.replace(/\B(?=(?:\d{3})+$)/g, thousands_sep)
  return intSum + dot
}

/**
 *
 * 根据任务状态编号获取状态名称
 * taskStatusNo：任务状态编号
 * retrun :statusName 状态名称
 */
export function getTaskByNo(taskStatusNo) {
  let statusName
  switch (parseInt(taskStatusNo)) {
    case -1:
      statusName = '流程结束'
      break
    case 0:
      statusName = '提交流程'
      break
    case 1:
      statusName = '通过'
      break
    case 2:
      statusName = '不通过'
      break
    case 3:
      statusName = '驳回'
      break
    case 4:
      statusName = '等待处理'
      break
    default:
      break
  }
  return statusName
}

/**
 * 根据审核编号获取审核信息
 * @param result 任务状态编号
 * @returns {{name: string, colorStr: string}} resultInfo 审核信息
 */
export function getColorByResultId(result = 0) {
  const resultInfo = {
    colorStr: '',
    name: ''
  }
  switch (result) {
    case null:
    case undefined:
    case 0:
      resultInfo.colorStr = '#1F81EC'
      resultInfo.name = '审核中'
      break
    case 1:
      resultInfo.colorStr = '#1BB799'
      resultInfo.name = '通过'
      break
    case 2:
      resultInfo.colorStr = '#E62000'
      resultInfo.name = '不通过'
      break
    case 3:
      resultInfo.colorStr = '#E62000'
      resultInfo.name = '驳回'
      break
    default:
      break
  }
  return resultInfo
}

/**
 * 验证token过期是否刷新Token信息
 */
export async function checkTokenRefresh() {
  // 服务端过期时间（秒）、记录时间戳（毫秒）、刷新Token
  const { expiresIn, recordDate, refreshToken } = getRefreshToken()
  if (!expiresIn || !recordDate || !refreshToken) {
    return
  }
  // 当前时间戳
  const currDate = Date.now()
  // 已使用时间（秒）
  const usedTime = (currDate - parseInt(recordDate)) / 1000
  // 已使用时间小于服务端过期时间的一半
  if (usedTime < (expiresIn / 2)) {
    return
  }

  // 已使用时间大于服务端过期时间的一半，请求刷新Token
  const refreshTokenParams = { grant_type: 'refresh_token', client_id: 'MOBILE', client_secret: '123456', refresh_token: refreshToken }
  try {
    // 刷新Token
    const resultToken = await login(refreshTokenParams)
    const resultTokenData = resultToken.data
    // 存储续期Token信息（登陆、刷新Token）
    if (resultTokenData?.expires_in && resultTokenData?.refresh_token && resultTokenData?.access_token) {
      setRefreshToken({
        recordDate: Date.now(),
        expiresIn: resultTokenData?.expires_in,
        refreshToken: resultTokenData?.refresh_token
      })
      setAccessToken(resultTokenData?.access_token)
    }
    return resultToken
  } catch (error) {
    console.log('checkTokenRefresh', error)
  }
}
